package mybox.junit;

import java.io.IOException;
import java.util.ArrayList;

import mybox.engine.Circle;
import mybox.engine.File4Qcad;
import mybox.engine.QVector;
import mybox.engine.ReferenceIOutput;
import mybox.engine.Schachtel;


import junit.framework.TestCase;

public class LadeTC extends TestCase {
	
	public void test_Lade() 
	throws SecurityException, IOException {
	File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
		
		
		double materialDicke=4;
		double zinkungsFaktor=1;
		double laserBreite=0.04;
		double laenge=70;
		double breite=50;
		double hoehe=30;
		
		new Schachtel(file4qcad, new QVector(0,0), laenge,breite,hoehe,materialDicke,zinkungsFaktor, laserBreite, Schachtel.isLade).draw();
		
		file4qcad.close();
	}
	
	public void test_LadeRekursiv() 
	throws SecurityException, IOException {
	File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
		
		
		double materialDicke=3.95;
		double zinkungsFaktor=1;
		double laserBreite=0.03;
		double initLaenge=30;
		double initBreite=30;
		double initHoehe=30;
		
		int anzSchachteln=3;
		
		ArrayList<Schachtel> schachtelArr = new ArrayList<Schachtel>();
		double nachUntenRutschen=0;
		for (int schachtIdx=0;schachtIdx<anzSchachteln;schachtIdx++) {
			if (schachtIdx==0) {
				schachtelArr.add(new Schachtel(file4qcad, new QVector(0,0), 
						initLaenge,initBreite,initHoehe,
						materialDicke,zinkungsFaktor,laserBreite, 
						Schachtel.isLade));
				schachtelArr.get(schachtIdx).draw();
			}
			else {
				Schachtel prevSchachtel = schachtelArr.get(schachtIdx-1);
				nachUntenRutschen += 
					4*materialDicke+prevSchachtel.breite+java.lang.Math.max(prevSchachtel.hoehe, prevSchachtel.breite);
				schachtelArr.add(new Schachtel(file4qcad, new QVector(0,-nachUntenRutschen), 
						 prevSchachtel.hoehe+materialDicke,
						 prevSchachtel.breite+2*materialDicke,
						 prevSchachtel.laenge+materialDicke,
						 materialDicke,zinkungsFaktor,laserBreite, 
						 Schachtel.isLade));
				new Circle(file4qcad, schachtelArr.get(schachtIdx).grundPlatte1.center,10).draw();
				schachtelArr.get(schachtIdx).draw();			 	
			}
		}
		
		
		
		file4qcad.close();
	}
	
	
	
	public void test_LadeSerie() throws SecurityException, IOException {
		
		File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());	
		
		double materialDicke=3.95;
		double zinkungsFaktor=1;
		double laserBreite=0.10;
		double initLaenge=45;
		double initBreite=45;
		double initHoehe=20;		
		int anzInnerSchachteln=2;
		double stossLochRadius=8;
		
		ArrayList<Schachtel> schachtelArr = new ArrayList<Schachtel>();
		double nachUntenRutschen=0;
		
		for (int schachtIdx=0;schachtIdx<anzInnerSchachteln;schachtIdx++) {
			
			nachUntenRutschen += 
				4*materialDicke+initBreite+java.lang.Math.max(initHoehe, initBreite);

			
				schachtelArr.add(new Schachtel(file4qcad, new QVector(0,-nachUntenRutschen), 
						initLaenge,initBreite,initHoehe,
						materialDicke,zinkungsFaktor,laserBreite, 
						Schachtel.isLade));
				schachtelArr.get(schachtIdx).draw();
				
		}
		
		double motherLaenge=initLaenge*anzInnerSchachteln+2*materialDicke;
		double motherBreite=initHoehe+2*materialDicke;
		double motherHoehe=initBreite+materialDicke;
		
		nachUntenRutschen += 
			4*materialDicke+motherBreite+java.lang.Math.max(motherHoehe, motherBreite);
		
		
		Schachtel mutterSchachtel = new Schachtel(file4qcad, new QVector(0,-nachUntenRutschen), 
				 motherLaenge,
				 motherBreite,
				 motherHoehe,
				 materialDicke,zinkungsFaktor,laserBreite, 
				 Schachtel.isLade);
		mutterSchachtel.draw();
		
		Schachtel einsLade = schachtelArr.get(0);
		
		QVector ecke2Center = QVector.diff(einsLade.laengenPlatte1.center, einsLade.laengenPlatte1.ecke[0]);		
		QVector firstEcke = new QVector(mutterSchachtel.grundPlatte1.ecke[0].x+materialDicke,mutterSchachtel.grundPlatte1.ecke[0].y+materialDicke);		
		
		QVector firstCenter = QVector.add(firstEcke, ecke2Center);
		firstCenter.y=mutterSchachtel.grundPlatte1.center.y;
		
		Circle lastCircle = new Circle(file4qcad, firstCenter,stossLochRadius);
		lastCircle.draw();
		QVector toNextCircle = new QVector(initLaenge,0);
        		
		
		for (int schachtIdx=1;schachtIdx<anzInnerSchachteln;schachtIdx++) {			
			Circle aktCircle = new Circle(file4qcad, QVector.add(lastCircle.center, toNextCircle),stossLochRadius);			
			aktCircle.draw();
			lastCircle = aktCircle;
		}
		
		
		file4qcad.close();
	}
	


}
